package jiuxing

type Msg08 struct {
	Tm        []byte
	Fault     uint32
	PlugNum   byte
	PlugFault []uint32
}

func (msg *Msg08) Decode(b []byte) {
	item := NewByteArray(b)
	msg.Tm = item.GetTimeArray(0)
	msg.Fault = item.GetUint32(6)
	msg.PlugNum = item.GetUint8(10)
	for i := 0; i < int(msg.PlugNum); i++ {
		msg.PlugFault = append(msg.PlugFault, item.Get3ByteUint32(11+3*i))
	}
}

func GetPileFalt(fault uint32) []string {
	faultList := []string{
		"汇流接触器", "输入接触器", "电表通讯", "读卡器通讯",
		"HMI 通讯", "绝缘检测模块", "急停", "柜门打开",
		"温湿度传感器", "风机", "加热器", "防雷器",
		"控制板硬件", "机柜过温", "湿度过高", "烟感报警",
		"功率分配单元通讯", "功率分配单元", "输入过压", "输入欠压",
		"输入过流", "输入缺相", "漏电", "充电记录满",
	}
	ret := []string{}
	for i := 0; i < 24; i++ {
		if fault&(1<<i) != 0 {
			ret = append(ret, faultList[i])
		}
	}
	return ret
}

func GetPlugFalt(fault uint32) []string {
	faultList := []string{
		"输出短路/反接", "输出接触器", "电子锁", "电表通讯",
		"充电模块通讯", "从控通讯", "绝缘模块通讯", "绝缘故障",
		"模块过温", "模块 PFC", "模块风扇", "模块地址冲突",
		"模块输入过压", "模块输入欠压", "模块输入缺相", "模块其它故障",
	}
	ret := []string{}
	for i := 0; i < 16; i++ {
		if fault&(1<<i) != 0 {
			ret = append(ret, faultList[i])
		}
	}
	return ret
}
